package org.example;

class Person {
    Person(){
        // System.out.println("Person constructor"); // 调用构造器的代码必须位于方法的最前面，所以在`this("匿名")`前执行输出是不被允许的
        this("匿名");
       // this("匿名", 18); // 不同同时调用两个构造器
    }

    Person(String name){}
    Person(String name, int age){}

    public void sayHello(){
        // this("匿名"); // 不能在非构造器方法中调用构造器
    }
}

class Counter {
    // i的值先被自动初始化为1，然后再在构造器中被初始化为7
    int i = 1;
    Counter() {
        i = 7;
        System.out.println("j=" + j);
    }

    // 这个字段虽然在构造器之后定义，但是它的初始化会在构造器代码`i=7`之前执行
    int j = 2;
// ...
}

public class ConstructorTest {
    public static void main(String[] args) {
        new Counter();
    }
}